home *** CD-ROM | disk | FTP | other *** search
- Messagepipeline Da Capo <-> CyPress
- ===================================
-
- Hier ist ein kleiner Überblick über die von CyPress und Da Capo verwendete
- 1st-Base-kompatible Messagepipeline. Näheres kann man auch dem
- Beispielprogramm 1B_PIPE.C entnehmen, welches als Programm oder Accessory
- läuft.
-
- Die Adressverwaltung muß 4 verschiedene Messagetypen erkennen und verarbeiten
- können. Es muß in jedem Fall eine Antwort abgeschickt werden.
-
-
- 1. Allgemeiner Init $1A00 (Abfrage der Programmversion)
- ----------------------------------------------------
-
- +--------------------------+--------------------------------+
- | Input | Output |
- +--------------------------+--------------------------------+
- | Message_buf [0] = $1A00 | Message_buf [0] = n.a. |
- | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID |
- | Message_buf [2] = PRG-ID | Message_buf [3] = instcode |
- | | Message_buf [4/5] = versionptr |
- +--------------------------+--------------------------------+
-
- ACC-ID: Die ID von Da Capo.
- PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muß)
- instcode: >= Null bedeutet Da Capo fehlerfrei initialisiert.
- < Null können diverse Fehlermeldungen sein.
- versionptr: Pointer auf die Programmversion.
- n.a.: nicht ausgewertet.
-
- WICHTIG: Über den Version ptr wird nachgeprüft, welches Programm (bis jetzt 1ST-
- ADDRESS und 1ST-BASE) installiert wurde. Vor dem Pointer, der ja nur
- auf eine Versionsnummer zeigt, steht der Name des Programmes. Bei 1ST-BASE
- sieht das folgenderweise aus: "1ST-BASE V1.00-D" (Zeiger zeigt auf das
- 'V').
-
- Anmerkung: Gegenwärtig muß der Eintrag "1ST-BASE V1.00-D" sein, da das
- Accessory sonst von CyPress nicht als 1st-Base kompatible Adressverwaltung
- erkannt wird.
-
-
- 2. Abfrage wichtiger Systemadressen $1B00
- ---------------------------------------
-
- +-------------------------------+-----------------------------+
- | Input | Output |
- +-------------------------------+-----------------------------+
- | Message_buf [0] = $1B00 | Message_buf [0] = n.a. |
- | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID |
- | Message_buf [2] = PRG-ID | Message_buf [2] = ACC-ID |
- | Message_buf [3] = file-Nummer | Message_buf [3] = errcode |
- | | Message_buf [4/5] = infoptr |
- +-------------------------------+-----------------------------+
-
- ACC-ID: Die ID von Da Capo.
- PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muß)
- file-Nr: Nummer der Tabelle, Klemmbrett = 0, Erste Datei = 1, usw.
- errcode: -1 = Tabelle existiert nicht.
- 0 = OK, Tabelle nicht selektiert.
- 1 = OK, Tabelle selektiert.
- infoptr Pointer auf 2 Langworte:
- msk-len Anzahl der Symbole
- msk-addr Pointer auf die Symboltabelle (Feldbezeichner) z.B.
- "Name","Vorname",...
- n.a. nicht ausgewertet.
-
- Anmerkung: Die Symboltabelle hat einen speziellen Aufbau: 1 Längenbyte
- (entspricht der Länge des folgenden Eintrages ohne NULL-Byte, also strlen),
- das Symbol selbst und als Abschluß ein (überflüssiges) NULL-Byte, also z.B.
- '5','F','i','r','m','a','\0'... Da Capo unterstützt nur eine Tabelle, d.h.
- die Symbole in CyPress lauten "1:Firma", "1:Nachname" usw.
-
-
- 3. ersten Datensatz holen $1B09 (search first)
- -------------------------------------------
-
- +-------------------------------+-----------------------------+
- | Input | Output |
- +-------------------------------+-----------------------------+
- | Message_buf [0] = $1B09 | Message_buf [0] = n.a. |
- | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID |
- | Message_buf [2] = PRG-ID | Message_buf [2] = ACC-ID |
- | Message_buf [3] = file-Nummer | Message_buf [3] = retcode |
- | Message_buf [4] = sel-type | Message_buf [4/5] = recptr |
- | Message_buf [5] = delm1/subst | |
- | Message_buf [6] = delm2/subst | |
- +-------------------------------+-----------------------------+
-
- ACC-ID: Die ID von Da Capo.
- PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muß)
- file-Nr: Nummer der Tabelle, Klemmbrett = 0, Erste Datei = 1, usw.
- sel-type 0 = aktuelle Liste, nur angewählte Datensätze
- 1 = aktuelle Liste, nur nicht angewählte Datensätze
- 2 = alle Datensätze in aktueller Liste
- 3 = Gesamtliste
- delm1 (high-byte) normale Feldtrennung.
- (subst1) (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden.
- delm2 (high-byte) Mehrfachfeldtrennung.
- (subst2) (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden.
- retcode: -1 = kein Datensatz gefunden.
- Sonst Anzahl der Datenfelder.
- recptr Pointer auf Datensatz (0 - terminiert)
- n.a. nicht ausgewertet.
-
- delm1 ist ',' und subst1 ist ';' delm2 und subst2 werden nicht verwendet
-
-
- 4. nächsten Datensatz holen $1B0A (search next)
- --------------------------------------------
-
- +-------------------------------+-----------------------------+
- | Input | |
- +-------------------------------+-----------------------------+
- | Message_buf [0] = $1B0A | Message_buf [0] = n.a. |
- | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID |
- | Message_buf [2] = PRG-ID | Message_buf [2] = ACC-ID |
- | Message_buf [3] = file-Nummer | Message_buf [3] = retcode |
- | Message_buf [4] = sel-type | Message_buf [4/5] = recptr |
- | Message_buf [5] = delm1/subst | |
- | Message_buf [6] = delm2/subst | |
- +-------------------------------+-----------------------------+
-
- ACC-ID: Die ID von Da Capo.
- PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muß)
- file-Nr: Nummer der Tabelle. Klemmbrett = 0, Erste Datei = 1, usw.
- sel-type 0 = aktuelle Liste, nur angewählte Datensätze
- 1 = aktuelle Liste, nur nicht angewählte Datensätze
- 2 = alle Datensätze in aktueller Liste
- 3 = Gesamtliste
- delm1 (high-byte) normale Feldtrennung.
- (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden.
- delm2 (high-byte) Mehrfachfeldtrennung.
- (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden.
- retcode: -1 = kein Datensatz gefunden.
- Sonst Anzahl der Datenfelder.
- recptr Pointer auf Datensatz (0 - terminiert)
- n.a. nicht ausgewertet.
-
- WICHTIG: Die Befehle Search_first und Search_next müssen für jede Datei
- getrennt bearbeitet werden, da CyPress durchaus folgendes machen könnte:
- - Search first auf alle Dateien 1,2,3,...
- - Search next auf 1
- - Search next auf 1
- - Search next auf 3
- - Search next auf 1
- - Search next auf 1
- - Search next auf 3
- - usw.
-
- ©1992/93, Sascha Lüdemann und Francisco Mendez
-